﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*
 * 继承中的构造方法
 * 
 * 特点：
 *          1、当实例化一个子类对象的时候，首先调用其父类构造方法，再调用其子类构造方法
 *          
 *          2、当实例化一个子类对象的时候，如果父类只拥有带参构造方法，则需要 显试调用其父类构造方法
 *          
 * 细节：          
 *          1、 子类构造方法如果显式调用父类某一个构造方法，则遵从其调用选择
 *          
 *          2、 子类构造方法没有显式调用父类的任何构造方法，则默认寻找其无参构造方法
 *          
 */
namespace 继承_继承中构造方法的使用
{
    //如果没有手动声明构造方法，系统为我们生成一个默认无参构造方法
    class Father
    {
        public int age = 0;

        //构成构造方法的重载关系
        public Father()
        {
            Console.WriteLine("Father NoneArgs Constructor");
        }
        public Father(int age) 
        {
            this.age = age;

            Console.WriteLine("Father Constructor");
        }
    }
    class Son : Father
    {
        //显示调用父类构造方法
        //1、 子类构造方法如果显式调用父类某一个构造方法，则遵从其调用选择
        //2、 子类构造方法没有显式调用父类的任何构造方法，则默认寻找其无参构造方法
        public Son()
        {
            Console.WriteLine("Son Constructor");
        }
    }

    //需求：
    /*
     *      老师类：（name age level teach方法）
     *      学生类：（name age id study方法）
     *      人类：（name age）
     *      希望通过构造方法对其初始化
     */
    class Person
    {
        public string name = "";

        public int age = 0;
        public Person(string name,int age)
        {
            this.name = name;

            this.age = age;

            Console.WriteLine("Person Constructor");
        }
        public Person()
        {

        }
    }
    class Teacher : Person
    {
        public string level = "";
        public Teacher(string name,int age,string level) : base(name,age)
        {
            this.level = level;
        }
    }
    class Student : Person
    {
        public int id = 0;
        public Student(string name,int age,int id) : base(name,age)
        {
            this.id = id;
        }
        public Student()
        {

        }
    }
    internal class Program
    {
        static void Main(string[] args)
        {
            Teacher teacher = new Teacher("李老师",30,"助教");

            Student student = new Student("小李",20,1001);

            Student student1 = new Student();
            student1.id = 1;
            student1.name = "";








            //Son son = new Son();
            //Console.WriteLine(son.age);


            ////如无手动构造方法，则调用默认无参构造方法
            //Father father = new Father(30);

            //Console.Write("\n");
            //Console.Write("\n");

            ////如无手动构造方法，则调用默认无参构造方法
            ////与此同时，首先调用父类默认无参构造方法
            //Son son = new Son();


            Console.Read();
        }
    }
}
